package main

import "fmt"

/**
 * 2.7 指针
 * (1) 指针不能运算
 * (2)
 *
 * 参数传递
 * 1.值传递？引用传递？
 * (1) c， c++ 两者都可以，其它语言参数一般都是引用传递，除了系统的内建参数以外，java，python都是这样，基本上所有的自定义类型都是引用传递，系统自定义的类型是值传递如int
 * 值传递拷贝了一份，不改变初始变量；引用传递改变变量值
 * (2) Go语言使用值传递?引用传递?
 * Go语言只有值传递—种方式
 *
 */
func main() {
	a, b := 3, 4
	swap1(a, b)
	fmt.Println(a, b)

	swap2(&a, &b)
	fmt.Println(a, b)

	swap3(a, b)
	fmt.Println(a, b)

}

// 1.不改变值
func swap1(a, b int) {
	b, a = a, b
}

// 2.参数为指针类型，改变值
func swap2(a, b *int) {
	*b, *a = *a, *b
}

// 3.参数为不可变量，改变值
func swap3(a, b int) (int, int) {
	return b, a
}
